Fix bug.
authorsmh22@firebug.cl.cam.ac.uk <smh22@firebug.cl.cam.ac.uk>
Wed, 20 Jul 2005 19:45:05 +0000 (19:45 +0000)
committersmh22@firebug.cl.cam.ac.uk <smh22@firebug.cl.cam.ac.uk>
Wed, 20 Jul 2005 19:45:05 +0000 (19:45 +0000)
Signed-off-by: Steven Hand <steven@xensource.com>
linux-2.6-xen-sparse/drivers/xen/blkback/blkback.c
linux-2.6-xen-sparse/drivers/xen/netback/netback.c
linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c
linux-2.6-xen-sparse/drivers/xen/usbback/usbback.c
linux-2.6-xen-sparse/include/asm-xen/hypervisor.h

index 969ed44023b6fc6df946fd673df5f763a226ce65..1fbead78c4e0214727819607beb2488ce3426a02 100644 (file)
@@ -145,7 +145,7 @@ static void fast_flush_area(int idx, int nr_pages)
                                __pte(0), 0);
     }
 
-    mcl[nr_pages-1].args[2] = UVMF_TLB_FLUSH|UVMF_ALL;
+    mcl[nr_pages-1].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL;
     if ( unlikely(HYPERVISOR_multicall(mcl, nr_pages) != 0) )
         BUG();
 #endif
@@ -550,7 +550,7 @@ static void dispatch_rw_block_io(blkif_t *blkif, blkif_request_t *req)
            0, blkif->domid);
 #ifdef CONFIG_XEN_BLKDEV_TAP_BE
         if ( blkif->is_blktap )
-            mcl[i].args[3] = ID_TO_DOM(req->id);
+            mcl[i].args[MULTI_UVMDOMID_INDEX] = ID_TO_DOM(req->id);
 #endif
         phys_to_machine_mapping[__pa(MMAP_VADDR(pending_idx, i))>>PAGE_SHIFT] =
             FOREIGN_FRAME(seg[i].buf >> PAGE_SHIFT);
index 45e542919d8322d3ca8b3cfc19c065495610bd97..4798b66920371f90e33bc9c86939c4bab6ec195d 100644 (file)
@@ -271,7 +271,7 @@ static void net_rx_action(unsigned long unused)
     mcl->args[3] = DOMID_SELF;
     mcl++;
 
-    mcl[-3].args[2] = UVMF_TLB_FLUSH|UVMF_ALL;
+    mcl[-3].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL;
     if ( unlikely(HYPERVISOR_multicall(rx_mcl, mcl - rx_mcl) != 0) )
         BUG();
 
@@ -428,7 +428,7 @@ static void net_tx_action(unsigned long unused)
         mcl++;     
     }
 
-    mcl[-1].args[2] = UVMF_TLB_FLUSH|UVMF_ALL;
+    mcl[-1].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL;
     if ( unlikely(HYPERVISOR_multicall(tx_mcl, mcl - tx_mcl) != 0) )
         BUG();
 
@@ -571,6 +571,7 @@ static void net_tx_action(unsigned long unused)
            mcl, MMAP_VADDR(pending_idx),
            pfn_pte_ma(txreq.addr >> PAGE_SHIFT, PAGE_KERNEL),
            0, netif->domid);
+
         mcl++;
 
         memcpy(&pending_tx_info[pending_idx].req, &txreq, sizeof(txreq));
index 419a2c336bfad4acf806bff72837d6461d3205ad..3a1b4fefd6e700bea389877489f088d991fa5d99 100644 (file)
@@ -400,7 +400,7 @@ static void network_alloc_rx_buffers(struct net_device *dev)
     }
 
     /* After all PTEs have been zapped we blow away stale TLB entries. */
-    rx_mcl[i-1].args[2] = UVMF_TLB_FLUSH|UVMF_ALL;
+    rx_mcl[i-1].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL;
 
     /* Give away a batch of pages. */
     rx_mcl[i].op = __HYPERVISOR_dom_mem_op;
index ad803ab3f505fc8a072c88a1c617db259031cb11..6ea151281bde71ef3e77cefe476ee83bb6200d06 100644 (file)
@@ -193,7 +193,7 @@ static void fast_flush_area(int idx, int nr_pages)
                                __pte(0), 0);
     }
 
-    mcl[nr_pages-1].args[2] = UVMF_TLB_FLUSH|UVMF_ALL;
+    mcl[nr_pages-1].args[MULTI_UVMFLAGS_INDEX] = UVMF_TLB_FLUSH|UVMF_ALL;
     if ( unlikely(HYPERVISOR_multicall(mcl, nr_pages) != 0) )
         BUG();
 }
@@ -651,7 +651,7 @@ static void dispatch_usb_io(usbif_priv_t *up, usbif_request_t *req)
     {
        MULTI_update_va_mapping_otherdomain(
            mcl+i, MMAP_VADDR(pending_idx, i),
-           pfn_pte_ma(buffer_mach >> PAGE_SHIFT, remap_prot),
+           pfn_pte_ma((buffer_mach + offset) >> PAGE_SHIFT, remap_prot),
            0, up->domid);
         
         phys_to_machine_mapping[__pa(MMAP_VADDR(pending_idx, i))>>PAGE_SHIFT] =
index 1fd5aaf6946d56f23f2ba845bdc6703d01fb14fb..0301a3cf48b203bb0a95798d6de131549364f73b 100644 (file)
@@ -141,6 +141,14 @@ unsigned long allocate_empty_lowmem_region(unsigned long pages);
 
 #include <asm/hypercall.h>
 
+#if defined(CONFIG_X86_64)
+#define MULTI_UVMFLAGS_INDEX 2
+#define MULTI_UVMDOMID_INDEX 3
+#else
+#define MULTI_UVMFLAGS_INDEX 3
+#define MULTI_UVMDOMID_INDEX 4
+#endif
+
 static inline void
 MULTI_update_va_mapping(
     multicall_entry_t *mcl, unsigned long va,